Spark Datasource V2

1 职责

读写外部数据

2 V1缺陷

  • 与其他API耦合,如SQLContext、RDD和DataFrame等。
  • 算子难以下推
  • 难以添加不同的数据编码
  • 难以实现写操作
  • 没有流式场景支持

3 API结构

(1) 读取

截屏2021-06-17 上午10.45.58

  • Batch

    批量查询的数据源扫描表达。用于提供物理信息,如扫描的分区数和从分区读取记录的方式

  • InputPartition

    输入分区的序列化表示。发送到执行器,通过PartitionReader读取。

  • PartitionReader

    用于输出RDD分区数据

  • PartitionReaderFactory

    用于创建PartitionReader实例

  • Scan

    数据源扫描的逻辑表达。用于提供逻辑信息,如实际读取的Schema。

  • ScanBuilder

    用于构建Scan,可混合下推接口。

  • Statistics

    数据源统计

  • SupportsPushDownFilters

    过滤下推,用于减少读取的数据量

  • SupportsPushDownRequiredColumns

    列下推,用于读取制定列,减少读取数据量

  • SupportsReportPartitioning

    报告数据分区,用于避免在Spark侧shuffle

  • SupportsReportStatistics

    提供算子下推后的统计信息,用于提供更精确统计信息给优化器

  • V1Scan

    版本迁移过渡接口

(2) 写入

截屏2021-06-17 上午10.46.24

  • BatchWrite

    批量写操作

  • DataWriter

    负责写单个RDD分区的数据。一个task只有一个。

  • DataWriterFactory

    在执行器侧创建并初始化DataWriter。

  • LogicalWriteInfo

    包含更新WriterBuilder时需要的逻辑信息

  • PhysicalWriteInfo

    更新DataWriterFactory时需要的物理信息

  • SupportsDynamicOverwrite

    支持动态分区覆盖

  • SupportsOverwrite

    支持覆盖

  • SupportsTruncate

    支持清空后写入

  • V1WriteBuilder

    过渡接口

  • WriteBuilder

    构建BatchWrite。默认不影响已有数据,可实现Support接口支持其他方式写操作

  • WriterCommitMessage

    返回给驱动程序的写操作信息

参考资料